package org.xxmi.thread;


/**
 * Thread 的常用方法：
 * 1. start() ：启动线程并执行相应的 run() 方法
 * 2. run()：子线程要执行的代码放入 run() 方法中
 * 3. currentThread() ：静态的，调取当前的线程
 * 4. getName()：获取此线程的名字
 * 5. setName：设置此线程的名字
 * 6. yield()：调用此方法的线程释放当前 CPU 的执行权(暂停当前正在执行的线程对象，并执行其他线程。)
 * 7. join()：在A线程中调用B线程的 join() 方法，表示：当执行到此方法，A线程停止执行，直至B线程执行完成，
 *      A线程在接着 join() 之后的代码执行
 * 8. isAlive()：判断当前线程是否还存活
 * 9. sleep(long l) ：显示的让当前线程睡眠 XXX 毫秒
 */
public class TestThread {
    public static void main(String[] args) {
        PrintNum p1 = new PrintNum("线程1");
        PrintNum p2 = new PrintNum("线程2");
//        p1.setPriority(Thread.MAX_PRIORITY);
//        p2.setPriority(Thread.MAX_PRIORITY);
        p1.start();
        p2.start();
        Thread.currentThread().setName("主线程 ============");
        //
        for (int i = 1; i <= 100; i++) {
            if (i % 10 == 0) {
                Thread.currentThread().yield(); // 执行其他线程
            }
            if(i == 5){
                try {
                    p1.join(); // 加入执行
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            if (i % 2 == 0) {
//                try {
//                    Thread.sleep(10L);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
                System.out.println(Thread.currentThread().getName() + ":" + i);
            }
        }
        System.out.println("getId() : " + Thread.currentThread().getId());
        System.out.println("isDaemon() : " + Thread.currentThread().isDaemon());
        System.out.println("主线程完成...");
    }
}
